文章摘要 FakeGPT
加载中...|
概述
git stash
是 Git 中用于临时保存未提交更改的命令。当你需要切换分支、拉取更新或清理工作区,但又不想提交当前未完成的修改时,可使用 git stash
将更改保存到栈中,稍后再恢复。
基本用法
保存当前更改
bash
git stash save "描述信息" # 保存工作区和暂存区的更改,并添加描述(可选)
git stash # 等同于 save,无描述信息
查看 stash 列表
bash
git stash list # 显示所有 stash 记录
# 输出示例:
# stash@{0}: WIP on master: abc123 提交信息
# stash@{1}: On dev: 临时保存
恢复 stash
bash
git stash apply # 恢复最近一次 stash(不删除)
git stash apply stash@{2} # 恢复指定 stash(通过索引)
恢复并删除 stash
bash
git stash pop # 恢复最近一次 stash 并从栈中删除
git stash pop stash@{1} # 恢复指定 stash 并删除
删除 stash
bash
git stash drop # 删除最近一次 stash
git stash drop stash@{3} # 删除指定 stash
git stash clear # 删除所有 stash
常用选项
选项 | 说明 |
---|---|
--keep-index | 只保存工作区的更改,暂存区的内容不被 stash(保留已 git add 的文件) |
--include-untracked , -u | 包含未跟踪文件(新增文件)到 stash 中 |
--all , -a | 包含所有文件(包括忽略文件)到 stash 中 |
--patch , -p | 交互式选择部分文件 / 代码块进行 stash |
show | 查看 stash 的具体更改内容(如:git stash show stash@{0} ) |
工作流程示例
场景:在未完成当前工作时需紧急切换到其他分支
保存当前工作区
bashgit stash save "临时保存未完成的功能"
切换到其他分支处理任务
bashgit checkout hotfix # 处理紧急任务... git commit -m "修复紧急 bug"
回到原分支恢复工作
bashgit checkout feature git stash pop # 恢复并删除最近的 stash
注意事项
冲突处理:恢复 stash 时若与当前分支有冲突,需手动解决:
bashgit stash apply # 遇到冲突暂停 # 手动修改冲突文件 git add <冲突文件> git stash drop # 手动删除已应用的 stash
stash 索引变化:删除中间的 stash 会导致后续索引前移(如删除
stash@{1}
后,原stash@{2}
变为stash@{1}
)。分支关联性:stash 默认不关联特定分支,可在任意分支恢复,但建议在相同分支恢复以减少冲突。
复杂变更的保存:使用
--patch
选项可选择性 stash 部分文件或代码块,适用于混合修改场景。
应用场景
- 紧急切换任务:在未完成当前功能时,需立即处理其他分支的工作。
- 清理工作区:拉取远程更新前,临时保存本地更改以避免冲突。
- 代码回滚实验:尝试新功能但不想提交,随时可恢复到原始状态。
- 分离提交:将混合的修改拆分为多个 stash,再逐个恢复并提交。
进阶技巧
创建分支从 stash 恢复
bash
git stash branch new-feature # 基于 stash 创建新分支并自动恢复
查看 stash 差异
bash
git stash show -p # 查看最近一次 stash 的详细差异
git diff stash@{0} # 对比当前工作区与 stash 的差异
直接提交 stash
bash
git stash commit # 将最近的 stash 直接转为一个新提交
小结
git stash
是 Git 中高效管理临时更改的工具,核心优势在于非破坏性保存工作状态,避免频繁提交不完整代码。使用时需注意 stash 的生命周期管理(及时恢复或删除),并善用 --patch
选项处理复杂场景。结合 git stash branch
可更安全地恢复到独立分支,减少冲突风险。
赞赏博主
评论 隐私政策